/* Copyright 2023 Man Group Operations Limited
 *
 * Use of this software is governed by the Business Source License 1.1 included in the file licenses/BSL.txt.
 *
 * As of the Change Date specified in that file, in accordance with the Business Source License, use of this software will be governed by the Apache License, version 2.0.
 */

#pragma once

#define ARCTICDB_MOVE_ONLY_DEFAULT(__T__) \
    __T__(__T__ && ) noexcept = default; \
    __T__& operator=(__T__ && )  noexcept = default; \
    __T__(const __T__ & ) = delete; \
    __T__& operator=(const __T__ & ) = delete;

#define ARCTICDB_MOVE_ONLY_DEFAULT_EXCEPT(__T__) \
    __T__(__T__ && )  = default; \
    __T__& operator=(__T__ && )  = default; \
    __T__(const __T__ & ) = delete; \
    __T__& operator=(const __T__ & ) = delete;

#define ARCTICDB_MOVE_COPY_DEFAULT(__T__) \
    __T__(__T__ && ) noexcept = default; \
    __T__& operator=(__T__ && )  noexcept = default; \
    __T__(const __T__ & ) = default; \
    __T__& operator=(const __T__ & ) = default;

#define ARCTICDB_NO_MOVE_OR_COPY(__T__) \
    __T__(__T__ && ) noexcept = delete; \
    __T__& operator=(__T__ && )  noexcept = delete; \
    __T__(const __T__ & ) = delete; \
    __T__& operator=(const __T__ & ) = delete;

#define ARCTICDB_NO_COPY(__T__) \
    __T__(const __T__ & ) = delete; \
    __T__& operator=(const __T__ & ) = delete;

#define ARCTICDB_MOVE(__T__) \
    __T__(__T__ && ) noexcept = default; \
    __T__& operator=(__T__ && )  noexcept = default;
